各端 UI 自动化控制技术全景

一句话总览:UI 自动化控制本质是"替人操作界面"——Web 端靠浏览器调试协议(CDP/WebDriver),桌面端靠系统辅助功能树(UIA/Accessibility),移动端靠系统注入框架(XCUITest/UIAutomator2)+ 底层 ADB。跨端统一封装由 Appium / Maestro 这类"胶水层"完成。

1.1 分类框架

按"被控制对象"划分,主流 UI 自动化控制技术可分为四大类:

类别被控制对象核心协议/机制代表技术
Web 浏览器网页(DOM / 渲染进程)CDP、WebDriver、WebDriver BiDiPlaywright、Puppeteer、Selenium、Cypress
桌面应用原生 GUI(窗口/控件)UIA、Accessibility(AX)、AT-SPI、X11pywinauto、FlaUI、WinAppDriver、AppleScript、Xdotool
手机 App移动应用(原生/Hybrid/WebView)XCUITest、UIAutomator2、ADB、WebDriverAppium、uiautomator2、Maestro、Espresso、XCUITest
键鼠坐标(兜底)任意屏幕像素系统级输入注入 / 图像识别pyautogui、SikuliX、AutoHotkey、OpenCV 模板匹配

四类的关系:前两类属于"语义级"控制(读控件树、按属性定位,稳定可靠);最后一类属于"像素级"兜底(图形界面不可读时使用,脆弱但万能)。手机 App 兼具两者——原生层可用语义树,WebView 内则走 Web 协议。

1.2 技术全景图

PlantUML diagram
四类控制对象 × 三层技术栈(库/框架 → 协议/驱动 → 系统能力)全景图

2. Web 浏览器控制

Web 是 UI 自动化最成熟的领域。两条技术路线:WebDriver(Selenium 开创、标准化的 JSON 协议)与 CDP(Chrome 内部调试协议,被 Puppeteer/Playwright 采用)。未来两者正融合为 WebDriver BiDi 新标准。

2.1 主流工具

Playwright(Microsoft)

Puppeteer(Google)

Selenium(W3C WebDriver)

Cypress

CDP(Chrome DevTools Protocol)裸用

2.2 选型对照

工具协议浏览器覆盖稳定性上手难度最佳场景
PlaywrightCDP + JugglerChromium/Firefox/WebKit高(自动等待)低跨浏览器 E2E、RPA、录制回放
PuppeteerCDPChromium 系高中爬虫、渲染、精细 DevTools 控制
SeleniumWebDriver最广(含 IE)中(需自管等待)中企业存量系统、Grid 云测、多语言团队
Cypress内嵌进程Chrome 系高低前端开发者日常 E2E/组件测试

3. 桌面应用控制

桌面控制的本质是"读系统辅助功能树(Accessibility Tree) + 按控件属性注入操作"。三大桌面平台各有原生通道,其上再叠框架与封装库。

3.1 Windows

技术类型机制说明
UI Automation (UIA)系统 APICOM 接口,微软官方可访问性框架控件树 + 属性 + Pattern(Invoke/Value/Selection...),WinForms/WPF/UWP/部分 Win32 均支持
FlaUI.NET 库封装 UIA(也可用 Win32)现代 C# 首选,强类型 API,支持 FluentWait
pywinautoPython 库Win32 API + UIA 双后端Python 生态首选;老应用用 Win32 后端,新应用切 backend="uia"
WinAppDriver服务/驱动基于 UIA,暴露 WebDriver 协议微软官方,可被 Appium/Selenium 调用,与 Web 自动化统一 API
AutoHotkey (AHK)脚本语言SendMessage / 键鼠注入轻量自动化/快捷键,坐标级为主,适合快速小脚本

3.2 macOS

技术类型机制说明
Accessibility API (AXUIElement)系统 APIAX 辅助功能树,AppleScript 可访问底层通道,Swift/ObjC 调用;需"辅助功能"权限授权
AppleScript / JXA脚本语言System Events → AX系统内建,适合系统级自动化、applescript 控制原生 App
XCUITest(macOS)测试框架XCTest + AX,注入进程Apple 官方,Apple 平台上 GUI 测试的标准(含 macOS 应用)
pyautogui / 第三方跨平台库坐标注入macOS 无 pywinauto 对应物,需走 AX 或坐标

3.3 Linux

技术类型机制说明
Xdotool命令行工具X11 协议键鼠/窗口控制最常用;Wayland 下失效(无 X11 注入),需换 ydotool
AT-SPI / Dogtail系统 API / Python 库可访问性树(GTK/Qt)GNOME 生态的语义级控制,Dogtail 是 Python 封装
ydotool命令行工具uinput 内核注入Wayland 下的键鼠注入方案

3.4 跨平台键鼠坐标(兜底)

技术类型机制说明
pyautoguiPython 库系统级鼠标/键盘/屏幕截图纯坐标操作,跨 Windows/macOS/Linux;识别弱、依赖定位稳定
SikuliX工具/IDEOpenCV 图像匹配 + Java AWT 注入以"图片找控件",对不可读 UI 有效;速度慢、环境敏感
OpenCV 模板匹配算法库截图 → matchTemplate可自建图像定位;常与 pyautogui 组合做自适应点击
AutoHotkey(Windows)脚本键鼠/窗口消息Windows 上坐标级脚本最快的方案

4. 手机 App 控制

移动端控制分两条路径:官方原生框架(Espresso / UIAutomator2 / XCUITest)与 跨平台统一框架(Appium / Maestro)。底层都离不开 ADB(Android 调试桥)与 iOS 的 idb/libimobiledevice 这类设备通道。

4.1 Android

技术类型机制说明
ADB设备通道命令行协议(USB/WiFi)底层能力:安装/启停 App、input 键鼠、uiautomator dump 截控件树、截图
UIAutomator2测试框架(Google)UIAutomator,进程内注入官方 UI 测试框架;对跨进程/系统 UI 支持弱
Espresso测试框架(Google)进程内同步注入官方推荐,同步性最好;仅测 App 内部,须编译进 APK
uiautomator2(Python 库)Python 库封装 ADB + UIAutomator2业界最常用,配合 atx-agent,支持元素定位/滑动/文本/图定位

4.2 iOS

技术类型机制说明
XCUITest测试框架(Apple)XCTest 注入 + AXApple 官方唯一权威方案,真机/模拟器均可;须在 Xcode 构建
idb工具(Meta)底层设备通道Facebook 开源,Appium 的 iOS 底层驱动之一,支持多设备并行
libimobiledevice工具库USB 协议逆向开源实现 iOS 设备通信,安装/启动 App、截图等底层能力

4.3 跨平台(Android + iOS)

技术协议底层说明
AppiumWebDriver(W3C 扩展)XCUITest / UIAutomator2 + WebDriverAgent事实标准;一套 API 驱动 Android/iOS/桌面(WinAppDriver/Mac2);生态大、云测支持多
Maestro自有 YAML DSLAndroid: UIAutomator2 / iOS: XCUITest新锐;YAML 声明式、上手快、自带 Flow 状态管理;适合快速验证与 CI
WebdriverIO(Appium 之上)WebDriverAppiumJS 生态,面向 Web + Mobile 统一测试

5. 全端对照总表

维度Web桌面手机
语义层通道CDP / WebDriverUIA / AX / AT-SPIUIAutomator2 / XCUITest
统一封装层Playwright / SeleniumWinAppDriver / FlaUI / pywinautoAppium / Maestro
设备/进程通道——ADB / idb / libimobiledevice
兜底方案pyautogui / SikuliX / OpenCV 图像匹配(坐标级)
主流语言TS / Python / JavaPython / C# / 脚本Python / Java / YAML
典型用途E2E 测试、爬虫、RPA桌面 RPA、软件测试App 测试、云真机、移动 RPA

6. 选型决策

6.1 决策流程图

PlantUML diagram
按被控对象 × 技术路线 → 落点主流工具的决策流程

6.2 RPA 场景组合

做跨端 RPA / 智能体控制时,业界标准组合是"一主多辅":

注意:桌面与移动的语义级控制普遍需要"辅助功能/无障碍"权限(Windows 需服务、macOS 需 辅助功能 授权、Android 需 uiautomator 或无障碍服务、iOS 无免越狱注入需测试框架)。生产环境务必提前规划权限与签名(iOS 需开发者证书/WebDriverAgent 签名)。